Skip to content

Personal Finance System v0.2

Published: at 00:00

背景

2023 年记录过一篇有关记账的文章,[[学习使用-beancount-记账]],当时系统的学习了 Beancount 的使用方法,了解了复式记账法的概念,坚持了三个月,最后放弃。现在想想,放弃的主要原因有三个

  1. 消费的录入比较繁琐,尤其是手机端的录入。电脑上录入虽然有快捷键,但还是要手动录入。而且 Beancount 的生态插件太少,如果要做个性的定制,需要投入较大的二次开发成本。
  2. 过于追求完美,对消费的细节录入占用了较多的精力,比如便利店买瓶可乐,门口买个煎饼果子,基本每笔消费都录入了。
  3. 数据报表都在 Web 端,实际查看和应用的次数并不多。相比之前使用 notion 记账,收益并不明显,投入成本却显著增加很多。

总之,2023 年 12 月放弃了 Beancount 记账。但使用 Beancount 过程中,学习到了复式记账,增加了对记账这个事情的理解。 这次尝试以 Notion 为中心,搭建一套完善的个人财务系统 Personal Finance System(简称 PFS) 。

PFS 是什么?

我们尝试给 PFS 下个定义,解决 PFS 是什么的问题。PFS 以 Envelope Budget Methodology 为基准,以 Zero-Sum Budgeting 为原则,解决个人的财务管理的完整方案。 我们希望这套系统可以解决两个问题,探索一个方向。具体来讲就是

  1. 解决当前记账不完整,支出不可控的问题
  2. 解决当前财务规划不清晰,缺乏财务目标和危机预案的问题
  3. 探索家庭资产配置和家庭理财方向

其实,无论使用什么记账工具,采用何种理念,需要解决的就是这几个基本的问题。

家庭记账相关方的分析

这里以一个典型的六口之家为例,分析家庭财务记账过程中,涉及的相关方,不仅仅是人,任何和家庭财务相关的主体,都是我们分析的对象,比如房子,车子。房子每个月需要还房贷,需要我们支出现金;车子每年需要买保险,做保养等,也是对现金的消耗。

Object 是行为的主体, Related Subject 是行为关联的对象,分析 Object 对 Money 的影响,增加还是减少,建立资金为中心的 workflow

如果把家庭的财产比作一个池子,其中的现金比作池子中的水,有些主体是向池子中注水,有些主体是向外放水。 通过上面的表格,可以看出,我们日常活动中,大部分行为都是放水的,可以稳定增加池子中水的只有工资收入。Money out 的方向比较多,也是我们要做支出管理的类目。

PFSv0.1 概览图

pfsv0.1-overview

根据上面的分析,我们大致整理出 PFSv0.1 版本的主要功能和具体模块。

其中,Account,Income,Expense,Budget,和 Database 是系统的核心模块。其他几个模块是根据 Notion 的特殊,做的自动化功能,或者是提效的快捷功能。

Account 管理

家里甭管有多少钱,这些钱都在一个具体的账户上,可能是银行卡,可能是支付宝,或者是虚拟币等。 每一个账号,都是单独可以操作的资金的主体。账号需要详细的记录资金的流动,无论是在系统内流动,还是系统外流动。

系统内流动:账号之间的资金流转,A 账号 → B 账号 系统外流动:外部资金 → A 账号。系统可以为外部资金建立一个虚拟账号,这样资金记录的数据结构就一致了。

账户举例

账户类型标签
招行储蓄卡储蓄卡工资卡
招行信用卡信用卡日常消费
支付宝电子钱包日常消费
长桥证券投资股票,基金
期权投资可回购
人情账现金已经借出的现金;
中国银行储蓄卡储蓄账户
负债账户房贷长期支出,体现本金和利息

账户里还有几个比较特殊的,下面我们逐一分析下这几个特殊的账号怎么处理

房贷

家庭有房贷时,每个月需要向银行归还本金和利息。如果最近不准备卖房,对房子的估值也不会太关注,在这种情况下,房子对家庭来说,就是一个负债,每个月会稳定的消耗家庭的现金流。比如每个月从 A 账户转入到房贷账户,银行再把钱划走,这样这比钱就从我们系统内流转到系统外。怎么标记银行的这个扣钱记录呢。参考复式记账法,我们给这个房贷建立一个虚拟账户,这样我们就可以把这个记录变成我们系统内的一个记录。

社交账户

人在江湖,总少不了吃吃喝喝。有时候,从朋友那里借了一笔钱,用了十年半载,然后再还回去。有时候,发小结婚,随礼小几万,将来能不能还不打紧。 这里涉及到几个问题。首先是外部的收款人,借款人不唯一,不确定,如果每个人都建立一个账户,会把系统复杂化。其次,有的资金往来需要归还,有的则不需要归还。 这个情况下,我们建立一个社交账户,记录借出的钱,以及从别人那里借入的钱。当我们从朋友那里借钱时,这里的余额为负,其他的银行卡账户收到一笔入账。当我们借给朋友钱时,这里的余额为正,银行卡记录一笔支出。

投资账户

俗话说,人无股不富,这年头,谁还没一点股票啊。投资账户,记录在投资市场的资金,重点是初期投入的本金。投资类型包括股票、基金、期权等。不包括定期存款和长期储蓄。 投资账户的价值波动,不反应在我们的记账系统中。比如我买的股票,上涨了 15 个点,但我没有卖出,还是账面的波动,这个对家庭的现金流是没有太大影响的。如果我在上涨 20 个点时卖出,把股票变成了可以流动的资金,那投资账户的金额会增加。如果股票亏了 30 个点,但我一直不割肉,这时投资账户的资金还是股票没下跌时的金额,不会变化。

之所以这样处理投资账户,是为了简化我们系统中投资及资产部分的管理,我们的PFSv01.版本重点是支出和预算管理,而投资中资产价值波动,投资策略等,我们都会简化为一个数字。

支付宝

支付宝和微信支付,是一个支付平台,本身也有信用卡和储蓄卡的功能。这个看个人习惯,如果开通了花呗,就相当是在使用信用卡。如果只是使用余额宝和现金,相当于是一个普通的储蓄卡。我们在系统中会创建一个支付宝的虚拟账号,这样支付宝上的钱,也在我们这个系统的管控之中。

以 Account 为中心的财务系统,可以很方便的分析现金流,资产总量等。系统中的资金流动,都是和账号相关的。

以此延伸出我们重要的三张数据表

下面是 Account 数据表的属性和不同维度的视图 account-0

account-0-0

account-1

account-2

Income

家庭记账相关方分析时, 我们就可以看到,家庭收入来源比较单一,其实没有太多开源手段和方法,搞不好,还会把主要收入来源给干废了。投资可能产生收益,也可能产生亏损。 如果投资的收益落袋为安,在当月进入收入表;如果只是账面金额,保持不动,待在投资账号中。

收入的来源,大概分为以下几类

我们能够支配的,是税后的现金部分,其他的即使可以冲抵部分债务(比如公积金),会在支出表中动态调整金额。这样做是为了简化我们的表结构和表之间的关系。

收入数据表在 PFS 中非常重要,它是预算管理锚点。预算管理原则之一,就是给每一块钱都要找到它的归宿。所以这张表,也会关联到我们的预算表。

收入分配时,有个多对多的关系,一笔收入,可以分配给多个预算项;每个预算项,可能来源于多个收入记录。Notion Database 原本不支持多对多的关系,为了解决这个问题,我们创建一个分配记录表中转,解决多对多的问题。

收入数据表的属性和几个常规视图如下

income-0

income-0-0

 simple-income-1

Expense

记账的最核心部分,记录和管理支出明细,如果发生了一笔支出,有哪些关联方呢?

  1. 账户:资金加减
  2. 资金:金额发生变动
  3. 预算:消耗预算
  4. 支出:支出本身的信息
    • 时间、金额、分类(标签)、账号

下面是一个简要的支持记录表

账号金额时间分类标签信封MonthlyYearly
招行信用卡5002024/10/1Food&DrinkCoffee日常消费10 月2024 年
民生信用卡8002024/10/3Shopping山姆日常消费10 月2024 年
招行信用卡1002024/11/6Bill电费日常消费11 月2024 年
招行储蓄卡8002024/3/1保险保险保险3 月2024 年

为了方便对支出管理,我们会对每一笔支出,添加 类目和标签,同时关联预算和账户

Category

类目相对固定,不要轻易改变;每一笔交易,属于唯一的类目,符合 MCME 法则

Tags

分散的,灵活的,可以膨胀的,可以是 Category 的子类目

TagsCategory
衣食住行日常消费
每月生活费日常消费
购物,线下购物,线上购物日常消费
红包社交
电话费日常消费
韩国之旅旅游
加油日常消费
停车费日常消费
电脑教育
手机日常消费
iPad日常消费
配件日常消费

expense-propeties

expense-database-view

每月可以根据支出记录,自动建立各个维度的简单视图,比如

image.png

image.png

image.png

通过不同维度的数据,可以很清晰的看到,我们的 money,通过哪个账户,花费在哪个主体,哪个类别上。

Budgets

预算是 PFS 设计之初就确定的核心功能之一,一个记账系统,如果没有预算相关的功能,也是完备的,只需要关注收入和支出即可。那预算在个人财务系统中存在的主要意义是什么呢?预算可以帮我们预测支出和收入,规划未来的资金,管控财务风险。比如,我想为 10 年后的小朋友预存一笔资金,这个钱怎么来,怎么存进去,通过预算管理,我们清晰的实现这个目标。

PFSv0.1 版本中,我们会简化预算管理的功能,主要将预算分类为月度预算和年度预算两类

月度预算

每月会生成一条预算记录,当月的该类目下的支出会关联到这条预算中,包括

年度预算

每年只有一条记录,包括

预算数据库表会与我们的账户表,支出表以及分配表关联。我们的预算表,大概会是这个样子

12条月度日常支出记录;9 条年度预算记录。同时每条记录会有类别,标签,我们也可以根据这些字段建立一些视图。

budgets-overview.png

budgets-monthly.png

budgets-label.png

有了预算规划,我们就可以根据收入情况,大致预测未来的现金流

image.png

Transfer

transfer 表的存在,主要记录 PFS 系统内资金的流动,典型的例子包括信用卡还款,还房贷,自己名下的各个账号之间转账。 PFS 和外部系统的资金记录,通过 Income 表 和 Expense 表记录。

image.png

image.png

我现在使用下来,需要使用 transfer 表的主要有以下几个场景

Database

Database 是 Notion 中一个单独的 page,集中管理我们系统中的几个表,这里我们会锁定几个表的字段,外部展示的时候是只读的,不允许修改字段的类型,新增字段等。几个关键的数据表都已经介绍过,这里截图展示一下这一个页面的目录。

image.png

User Case

我今天发工资了,PFS 中会有什么变化?

发工资,是有一笔收入进入 PFS 系统中,涉及到三张表

  1. Income 表,新增一条收入记录
  2. Account 表,新增收入记录时,自动关联到收入增加的账户
  3. Allocation 表,新增的收入,分配到不同的预算中,具体分配到哪些预算,各分配多少,在这张表中记录。这个表是可选的。

我用 30 快钱买了一杯星巴克,使用的微信零钱支付,PFS 有哪些变化?

这是一个消费行为,会在 PFS 中新增一条支出记录,设计 Expense,Budget,Account 三张表

  1. expense 中新增一条记录,记录这个消费行为,包括金额,类目,标签等。同时关联预算,和账户两张表。
  2. budget 表会被动增加一笔支出,消耗预算金额,关联支出明细。
  3. account 表中的 微信虚拟账户 被动增加一笔支出,关联支出明细。

月底了,要还房贷了?

我的还房贷用的储蓄卡不是我日常使用的主卡,通常我会在预约指定日期执行一笔转账,然后到期后还房贷专用的储蓄卡用来扣款。这里涉及到多个账户,两种类型的资金流动

想要买个 168 平米的小房子,借了朋友 88 万,PFS 有哪些变化?

借朋友 88 万,这个钱将来要还的,还要给一笔利息。涉及到 外借虚拟账户,还款时需要新增一笔利息支出,这个是在外借金额之外的费用。

  1. Transfer 中新增一条记录,转出账户是 外借虚拟账户, 转入账户是自己的收款账户。这时外借账户的金额会变为负 88 万
  2. 收款账户中新增一笔转入,会增加 88 万 金额。
  3. 还款时,新增一笔 Transfer 记录,转出账户为自己的收款账户,转入账户为 外借虚拟账户。完成这条记录后,外借虚拟账户的金额为
  4. 新增的利息,在 Expense 中新增一条记录,金额为利息。我们把这笔借款产生的利息当作支出费用。这样既可以保证我们的虚拟账户转出金额和转入金额相等,又能够保证我们系统整体的金额可以兑平。

最近行情不错,投资 5万买大 A 怎么样?

这是一笔投资行为,不涉及投资的盈亏评估,涉及两个账户,投资账户和储蓄卡账户。

  1. Transfer 中增加一条记录,转出账户为储蓄卡,转入账户为投资虚拟账户

这里只是将钱从储蓄卡账户,转移到投资账户中,不涉及到止盈或者割肉操作,就没有收入或者支出行为。

川建国上台,买了川币,翻了 20 倍止盈,PFS 有哪些变化?

止盈的前提是,之前有投资行为的发生,这里涉及两个账户,投资账户和储蓄账户。

  1. 投资虚拟账户新增一条收入记录,若投入本金 100,现在 2000,新增收入记录 1900
  2. 如果要将止盈的金额转出到其他账户,再新增一条 transfer 记录,转出账户为 投资账户,转入账户为收款账户

几十张卡,怎么看我现在手里一共有多少可用的钱啊?

我们想看手里有多少可用的钱,一般是指现金流,或者短期调整后可以变成现金的东西。比如 活期存款,余额宝,基金,短期存款等。不包括 房子,车子,股权,期权等。除非万不得以,我们一般不会想着卖房子,卖车子。

大部分情况,现金都趴在几个账户上,想要看现金流,我们分析手中的账户就可以了。 这里有个关键问题,怎么处理房子的负债呢?几百万的房子,每个月还有好几万的月供呢?要不要考虑房子的市场估值和负债呢?

这里我们使用的折中的办法,评估现金流时有三种方案。

  1. 家庭整体资产负债情况,包括房子未偿还的贷款,房子的市场估值,手中可用的现金以及其他可以折算成现金的资产,主要是股票、期权等
  2. 家庭简要资产负债评估,不包括房子市场估值,包括未偿还的贷款,不包括长期的期权,股票等投资。这个是谨慎评估,可以衡量不改变资产结构情况下的抗风险能力。
  3. 当前可用现金评估,不考虑房子负债和市场估值,只看我现在手里有多少可用现金。这个是几个储蓄账户的可用余额累加,再减去信用卡和当期房贷之后的数字。

2049 年来了,PFS 要更新哪些东西?

新的一年来了,我们需要对2048 年的数据做归档整理,对新的一年 2049 年,建立独立的视图,主要涉及 Income, Budget,Expense三张表。

  1. Income :2049 年收入预测,区分稳定收入和波动收入,波动收入区分极大值、极小值和中位数
  2. Budget:根据收入预测,参考中位数,创建 2049 年的年度预算记录和月度预算记录。通常会有 18 条,12 条月度预算,6 条年度预算。
  3. 2048 年数据简要分析:分析 2048 年支出表,预算表,关注支出大类和方向,预算表关注超支的类目和账户。
  4. Expense:归档 2048 年支出明细,新建 2049 年支出视图

FAQ

有这么多的记账软件,为什么还要自己设计一个?

image.png

借用 《漂白》中的一句话,“干中学嘛”。 深入理解一个事情,最简单的就是亲自实现它, Learning By Doing。当我们明白了一个事情的 What 和 How,能够从零开始交付一个可以使用的产品,再结合 AI 的辅助与加持,那未来迎接我们的,就是星辰大海。

PFS 还会进化吗?未来会是什么样子?

PFS 当前是 v0.2 版本,未来会持续进化。2025 年预计会有v0.3 和 v0.4两个版本的迭代。简化的方向使提升系统的自动化能力,降低使用成本。

v0.3 DDL 2025/07

  1. 完善 Template 和 QuickAction 能力
  2. 增加基础的财务分析能力

v0.4 DDL 2025/12

  1. 提高记录便捷性,提供 AI 语音记账,语义化记账能力
  2. 提供 openApi 版本,链接三方智能体和 Agent,打造个性化的财务助理。

PFS 模板可以共享吗?

当前没有可以共享的模版,因为数据表中有较多的个人数据。如果需要 Notion 模版,可以留言或者私信,留下你的邮箱,等我整理好以后会发送共享连接给你。

参考资料

PFS 设计之初,参考了 Actual 中预算管理的思想,信封预算法。使用了三个月后,PFS 简化了预算功能,砍掉了信封数据表,但仍然感谢 Actual 这个软件。如果你正在寻找一款支出预算管理的个人记账软件,推荐你尝试一下 Actual


关注公众号 技术后花园 获取更多信息

image.png